﻿//-------------------------------------
// WBFSSync - WBFSSync.exe
//
// Copyright 2009 Caian (ÔmΣga Frøst) <frost.omega@hotmail.com>
//
// WBFSSync is Licensed under the terms of the Microsoft Reciprocal License (Ms-RL)
//
// IDrive.cs:
//
// Interface que guarda informações sobre dispositivos de armazenagem conectados ao computador
//
//-------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace WBFSSync
{
    [Flags]
    public enum DriveFlags : ushort
    {
        Unknown = 0, //Inválido
        
        //Tipos de mídia física
        Removable       = 1,
        Fixed           = 2,
        Network         = 4,
        CDRom           = 8,
        Ram             = 16,

        DRIVETYPEMASK   = 31,

        //Sistemas de arquivo e outras características
        WBFS            = 32,
        WinDrive        = 64, // Unidade onde reside o sistema operacional
        Folder          = 128, // Pastas especiais como "Meus Jogos" - flag não utilizada no momento

        Virtual         = 256, // Drive virtual WBFS - Para Debug apenas

        //Acesso
        ReadProtected   = 512, // O acesso do usuário não o permite ler o drive
        WriteProtected  = 1024, // O acesso do usuário não o permite escrever no drive
    }

    public interface IDrive
    {
        String Name { get; }
        String Label { get; }
        DriveFlags Flags { get; }

        Boolean Ready { get; }

        Int64 Size { get; }
        Int64 FreeSpace { get; }
        Int64 UsedSpace { get; }
        Int64 ReservedSpace { get; set; } //Espaço reservado para uma operação pendente, não altera o espaço livre real do HD
                                          //nem qualquer operação feita fora do aplicativo

        Boolean Is(DriveFlags flag);

        Int32 ActiveOperations { get; set; } //Para ser usado pelo OperationManager

        int Open(Char d);
        void Close();

        void Refresh();
    }
}
